草庐IT

NumPy 位运算

全部标签

c++ - C++ new 运算符能保证返回的指针不会改变它的值吗?

在C++中:constsize_tN=1000;int*p=newint[N];//time=t0我的程序只有一个线程,在为p分配内存后,我的程序将只读取p指向的内存。标准对p的值有何规定?p是否会保留它在time=t0时获得的值,直到p被删除?或者,操作系统能否自行决定重新分配p指向的内存?是否取决于N的值? 最佳答案 p的值在创建后不能移动。该标准使这样做毫无用处:3.7.4.1分配函数...如果请求成功,则返回值应为非空指针值(4.10)p0,不同于任何先前返回的值p1,除非该值p1随后被传递给操作符delete。(引用标准结

C++ 运算符重载错误检查无异常

我有一个类似于vector的类,它主要是一个动态大小的数组。我正在为资源有限的平台编写它,因此我必须不使用异常。很明显,要使用运算符重载来简化此类动态分配的接口(interface),必须在某些运算符重载函数中执行。赋值运算符(=)就是一个例子。尽管无一异常(exception),以一种明智的方式将错误的分配错误通知调用者,同时仍然保持强大的错误安全性变得相当具有挑战性。我可以有一个类的错误属性,调用者必须在每次涉及动态分配的调用后检查它,但这似乎不是一个最佳解决方案。编辑:这是我目前得到的最好的想法(在上一段中被突出显示为一个不太理想的解决方案),任何改进将不胜感激:dyn_arr&

c++ - 除非满足静态条件,否则阻止转换运算符编译

我有Vector(CVector)、Matrix(CMatrix)和Tensor(CTensor)类,我希望能够从CTensor隐式转换类到CVector如果sizeof...(Sizes)==1类和CMatrix如果sizeof...(Sizes)==2类,所以我有以下转换运算符(最初我没有std::enable_if模板参数希望我可以使用SFINAE来防止它编译):template::type=0>operatorCMatrix()const{static_assert(sizeof...(Sizes)==2,"Youcanonlyconvertarank2tensortoamat

numpy排序功能返回无

我有一个简单的程序:importnumpyasnparr=np.random.randn(8)new=arr.sort()new1=np.sort(arr)printnewprintnew1我希望两个新数组与排序的数组相同,但是new是None,new1我期望的是,两种分类方法有什么区别?看答案从文档为了numpy.ndarray.sort:排序一个阵列,就位。如果您想要原始数组的排序副本,而不是对定位,则应使用numpy.sort,如您所见,它返回副本。

c++ - 使用即时计算的临时值为 ForwardIterator 实现成员访问运算符->

我正在为一个适配器范围实现一个迭代器,它懒惰地评估原始范围上的某些东西。这意味着:取消引用迭代器应该取消引用底层迭代器并对结果应用一些操作,然后返回该操作的结果。Toperator*()const{returnsomeOperation(*original_iterator);}如何实现类似于此operator*的operator->?在查看其他迭代器的实现时,它们通常返回一个T*。但是我不能返回一个指针,因为“指向对象”是一个临时的、即时计算的。在这种情况下,通常的指导是什么?我可以简单地返回一个T吗?虽然我个人不需要这个运算符(我也可以使用(*i​​).m而不是i->m并且标准算法

c++ - 范围解析和 this 运算符

在我最近参加的(C++)类(class)中,老师提到使用->运算符比使用点符号和手动取消引用指针要慢一点(例如(*ptr)).这是真的吗?如果是,为什么?这是否也适用于C? 最佳答案 ->运算符既不比.运算符慢也不快。事实上,取消引用某些东西比仅仅访问内存位置要慢,因为还有一个间接的途径。这是生活中的一个事实,无论是在C和C++中还是在任何其他语言中。在C++中,您还有引用,因此您也可以使用.取消引用某些内容!所以这里的问题不是arrow-vs-dot,问题是编译器是否可以直接找到一个值,或者它是否必须先搜索它的地址。

c++ - 运算符 T&() 还是运算符 T()?

在定义转换运算符时,定义有什么好处operatorT()const;结束operatorT&();operatorconstT&()const;假设我不关心返回值而不是引用的潜在性能提升。 最佳答案 第二种方法肯定更好。对于第一种方法,调用代码需要来制作返回对象的拷贝,这可能很昂贵。使用第二种方法,调用代码可以选择制作或不制作拷贝。当您负责一个类/库时,您不想对没有解决方法的性能瓶颈负责。第二种方法的一个主要缺点是调用代码可能会留下悬空指针/引用。为了帮助您的用户,您必须清楚地记录返回的引用的有效期。希望您的用户会注意并做正确的事。

c++ - 后递减运算符和逻辑运算符之间的交互

例如,在下面的表达式中i--&&表达式i在计算expr时是否已经递减?语言律师会适应这里。 最佳答案 如果&&运算符是内置运算符,则可以。来自[expr.log.and]/2:Ifthesecondexpressionisevaluated,everyvaluecomputationandsideeffectassociatedwiththefirstexpressionissequencedbeforeeveryvaluecomputationandsideeffectassociatedwiththesecondexpressi

c++ - 如何在 C++ 中重载一元和二元减号运算符?

在C++中,如何区分一元和二元负运算符的运算符重载函数?我正在尝试使用以下代码重载两者:VectorVector::operator-(){returnVector(-x,-y,-z);}VectorVector::operator-(constVector&v){returnthis*+(-v);}但这会产生很多错误:vector.cpp:Inmemberfunction‘VectorVector::operator-(constVector&)’:vector.cpp:88:20:error:passing‘constVector’as‘this’argumentof‘Vector

c++ - 为什么 c++ string == (equality) 运算符比手动逐个检查字符快得多?

我在玩C++字符串,发现使用C++字符串==运算符比手动逐个检查字符要快得多:#include#include#includeusingnamespacestd;//assumess1ands2areofsamelengthboolmyEqual(string&s1,string&s2){inti=0;intj=0;while(i输出显示:MyEqual:18==operator:3对于较大的字符串,差异更为显着。我最初认为c++string==operator会做一些与手动逐个比较字符非常相似的事情,但显然它使用了一些优化来显着优于手动方法。c++string==操作符做了哪些优化?